跳到主要内容

MQ 常见的消费模式

生产者-消费者消息队列模式

生产者生产消息后,消息会持久化进入队列,分发给不同的消费者消费(同一个组的消费者均分消息,不同组的消费者都得到消息的一份拷贝),只要队列里的消息还没被消费群组确认完,会一直消费,每一个消费群组会记录消费到的消息 offset。

这里主要涉及的是消费者组的概念:

提示

Consumer Group:消费者组,由一到多个 Consumer 组成,每个 Consumer 都属于一个 Consumer Group。

  • 消费者组在逻辑上是同一个订阅者。
  • 消费者组内每个消费者负责消费不同分区(Partition)的数据,一个分区只能由一个组内消费者消费;
  • 消费者组之间互不影响。即每条消息只能被 Consumer Group 中的一个 Consumer 消费;
  • 但是可以被多个 Consumer Group 组消费。这样就实现了单播和多播。

但是注意,不只是 MQ 能做消费队列,其实也有很大一部分公司使用 Redis 来做消费队列

例如在 Go 上的 Redis 消费队列工具 machinery

发布-订阅模式

在订阅之前的消息收不到,只会收到订阅之后的消息,也就是非持久化的消息发布(退化的生产者-消费者消息队列模式)。

就是设计模式中的发布-订阅模式